{
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "# Classification Cluster"
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import pandas as pd\n",
        "\n",
        "import warnings\n",
        "warnings.filterwarnings(\"ignore\")\n",
        "\n",
        "# fix_yahoo_finance is used to fetch data \n",
        "import fix_yahoo_finance as yf\n",
        "yf.pdr_override()"
      ],
      "outputs": [],
      "execution_count": 1,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Get S&P500 stock symbols, sectors, and subsectors from wikipedia\n",
        "wiki_table = pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies',header=0)[0]\n",
        "symbols = list(wiki_table['Ticker symbol'])"
      ],
      "outputs": [],
      "execution_count": 2,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(symbols)\n",
        "print(\"\\nTotal number of companies are:\")\n",
        "len(symbols)"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "['MMM', 'ABT', 'ABBV', 'ABMD', 'ACN', 'ATVI', 'ADBE', 'AMD', 'AAP', 'AES', 'AET', 'AMG', 'AFL', 'A', 'APD', 'AKAM', 'ALK', 'ALB', 'ARE', 'ALXN', 'ALGN', 'ALLE', 'AGN', 'ADS', 'LNT', 'ALL', 'GOOGL', 'GOOG', 'MO', 'AMZN', 'AEE', 'AAL', 'AEP', 'AXP', 'AIG', 'AMT', 'AWK', 'AMP', 'ABC', 'AME', 'AMGN', 'APH', 'APC', 'ADI', 'ANSS', 'ANTM', 'AON', 'AOS', 'APA', 'AIV', 'AAPL', 'AMAT', 'APTV', 'ADM', 'ARNC', 'ANET', 'AJG', 'AIZ', 'T', 'ADSK', 'ADP', 'AZO', 'AVB', 'AVY', 'BHGE', 'BLL', 'BAC', 'BK', 'BAX', 'BBT', 'BDX', 'BRK.B', 'BBY', 'BIIB', 'BLK', 'HRB', 'BA', 'BKNG', 'BWA', 'BXP', 'BSX', 'BHF', 'BMY', 'AVGO', 'BR', 'BF.B', 'CHRW', 'CA', 'COG', 'CDNS', 'CPB', 'COF', 'CAH', 'KMX', 'CCL', 'CAT', 'CBOE', 'CBRE', 'CBS', 'CELG', 'CNC', 'CNP', 'CTL', 'CERN', 'CF', 'SCHW', 'CHTR', 'CVX', 'CMG', 'CB', 'CHD', 'CI', 'XEC', 'CINF', 'CTAS', 'CSCO', 'C', 'CFG', 'CTXS', 'CLX', 'CME', 'CMS', 'KO', 'CTSH', 'CL', 'CMCSA', 'CMA', 'CAG', 'CXO', 'COP', 'ED', 'STZ', 'COO', 'CPRT', 'GLW', 'COST', 'COTY', 'CCI', 'CSX', 'CMI', 'CVS', 'DHI', 'DHR', 'DRI', 'DVA', 'DE', 'DAL', 'XRAY', 'DVN', 'DLR', 'DFS', 'DISCA', 'DISCK', 'DISH', 'DG', 'DLTR', 'D', 'DOV', 'DWDP', 'DTE', 'DRE', 'DUK', 'DXC', 'ETFC', 'EMN', 'ETN', 'EBAY', 'ECL', 'EIX', 'EW', 'EA', 'EMR', 'ETR', 'EOG', 'EQT', 'EFX', 'EQIX', 'EQR', 'ESS', 'EL', 'EVRG', 'ES', 'RE', 'EXC', 'EXPE', 'EXPD', 'ESRX', 'EXR', 'XOM', 'FFIV', 'FB', 'FAST', 'FRT', 'FDX', 'FIS', 'FITB', 'FE', 'FISV', 'FLT', 'FLIR', 'FLS', 'FLR', 'FMC', 'FL', 'F', 'FTNT', 'FTV', 'FBHS', 'BEN', 'FCX', 'GPS', 'GRMN', 'IT', 'GD', 'GE', 'GIS', 'GM', 'GPC', 'GILD', 'GPN', 'GS', 'GT', 'GWW', 'HAL', 'HBI', 'HOG', 'HRS', 'HIG', 'HAS', 'HCA', 'HCP', 'HP', 'HSIC', 'HSY', 'HES', 'HPE', 'HLT', 'HFC', 'HOLX', 'HD', 'HON', 'HRL', 'HST', 'HPQ', 'HUM', 'HBAN', 'HII', 'IDXX', 'INFO', 'ITW', 'ILMN', 'IR', 'INTC', 'ICE', 'IBM', 'INCY', 'IP', 'IPG', 'IFF', 'INTU', 'ISRG', 'IVZ', 'IPGP', 'IQV', 'IRM', 'JEC', 'JBHT', 'JEF', 'SJM', 'JNJ', 'JCI', 'JPM', 'JNPR', 'KSU', 'K', 'KEY', 'KMB', 'KIM', 'KMI', 'KLAC', 'KSS', 'KHC', 'KR', 'LB', 'LLL', 'LH', 'LRCX', 'LEG', 'LEN', 'LLY', 'LNC', 'LKQ', 'LMT', 'L', 'LOW', 'LYB', 'MTB', 'MAC', 'M', 'MRO', 'MPC', 'MAR', 'MMC', 'MLM', 'MAS', 'MA', 'MAT', 'MKC', 'MCD', 'MCK', 'MDT', 'MRK', 'MET', 'MTD', 'MGM', 'KORS', 'MCHP', 'MU', 'MSFT', 'MAA', 'MHK', 'TAP', 'MDLZ', 'MNST', 'MCO', 'MS', 'MOS', 'MSI', 'MSCI', 'MYL', 'NDAQ', 'NOV', 'NKTR', 'NTAP', 'NFLX', 'NWL', 'NFX', 'NEM', 'NWSA', 'NWS', 'NEE', 'NLSN', 'NKE', 'NI', 'NBL', 'JWN', 'NSC', 'NTRS', 'NOC', 'NCLH', 'NRG', 'NUE', 'NVDA', 'ORLY', 'OXY', 'OMC', 'OKE', 'ORCL', 'PCAR', 'PKG', 'PH', 'PAYX', 'PYPL', 'PNR', 'PBCT', 'PEP', 'PKI', 'PRGO', 'PFE', 'PCG', 'PM', 'PSX', 'PNW', 'PXD', 'PNC', 'RL', 'PPG', 'PPL', 'PX', 'PFG', 'PG', 'PGR', 'PLD', 'PRU', 'PEG', 'PSA', 'PHM', 'PVH', 'QRVO', 'PWR', 'QCOM', 'DGX', 'RJF', 'RTN', 'O', 'RHT', 'REG', 'REGN', 'RF', 'RSG', 'RMD', 'RHI', 'ROK', 'COL', 'ROL', 'ROP', 'ROST', 'RCL', 'CRM', 'SBAC', 'SCG', 'SLB', 'STX', 'SEE', 'SRE', 'SHW', 'SPG', 'SWKS', 'SLG', 'SNA', 'SO', 'LUV', 'SPGI', 'SWK', 'SBUX', 'STT', 'SRCL', 'SYK', 'STI', 'SIVB', 'SYMC', 'SYF', 'SNPS', 'SYY', 'TROW', 'TTWO', 'TPR', 'TGT', 'TEL', 'FTI', 'TXN', 'TXT', 'TMO', 'TIF', 'TWTR', 'TJX', 'TMK', 'TSS', 'TSCO', 'TDG', 'TRV', 'TRIP', 'FOXA', 'FOX', 'TSN', 'UDR', 'ULTA', 'USB', 'UAA', 'UA', 'UNP', 'UAL', 'UNH', 'UPS', 'URI', 'UTX', 'UHS', 'UNM', 'VFC', 'VLO', 'VAR', 'VTR', 'VRSN', 'VRSK', 'VZ', 'VRTX', 'VIAB', 'V', 'VNO', 'VMC', 'WMT', 'WBA', 'DIS', 'WM', 'WAT', 'WEC', 'WCG', 'WFC', 'WELL', 'WDC', 'WU', 'WRK', 'WY', 'WHR', 'WMB', 'WLTW', 'WYNN', 'XEL', 'XRX', 'XLNX', 'XYL', 'YUM', 'ZBH', 'ZION', 'ZTS']\n",
            "\n",
            "Total number of companies are:\n"
          ]
        },
        {
          "output_type": "execute_result",
          "execution_count": 10,
          "data": {
            "text/plain": [
              "505"
            ]
          },
          "metadata": {}
        }
      ],
      "execution_count": 10,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Fetch the list of stocks for our symbols from Yahoo Finance History Prices \n",
        "start = '2017-01-01'\n",
        "end = '2017-12-31'\n",
        "\n",
        "print(\"Downloading values for period %s to %s\" % (start, end))\n",
        "dataset = yf.download(symbols,start,end)['Adj Close']\n",
        "print(\"Done!\")"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Downloading values for period 2017-01-01 to 2017-12-31\n",
            "[*********************100%***********************]  505 of 505 downloaded\n",
            "Done!\n"
          ]
        }
      ],
      "execution_count": 11,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "dataset.head()"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "execution_count": 12,
          "data": {
            "text/plain": [
              "                    A        AAL         AAP        AAPL       ABBV  \\\n",
              "Date                                                                  \n",
              "2017-01-03  45.764454  45.590179  170.015747  113.013916  57.952969   \n",
              "2017-01-04  46.364933  45.984047  171.410950  112.887413  58.770123   \n",
              "2017-01-05  45.813671  45.186462  171.291336  113.461502  59.215847   \n",
              "2017-01-06  47.241043  45.501560  169.049072  114.726402  59.234417   \n",
              "2017-01-09  47.388699  46.358227  168.949417  115.777237  59.624420   \n",
              "\n",
              "                  ABC        ABMD        ABT         ACN        ADBE  \\\n",
              "Date                                                                   \n",
              "2017-01-03  80.150398  112.360001  37.477722  113.159943  103.480003   \n",
              "2017-01-04  82.139374  115.739998  37.775249  113.432007  104.139999   \n",
              "2017-01-05  81.188530  114.809998  38.101559  111.731606  105.910004   \n",
              "2017-01-06  82.275185  115.419998  39.138073  113.004478  108.300003   \n",
              "2017-01-09  82.934944  117.110001  39.099686  111.741318  108.570000   \n",
              "\n",
              "              ...            XEL       XLNX        XOM       XRAY        XRX  \\\n",
              "Date          ...                                                              \n",
              "2017-01-03    ...      38.389378  56.932369  84.925102  57.858753  25.919497   \n",
              "2017-01-04    ...      38.559494  56.517933  83.990730  58.332508  26.897594   \n",
              "2017-01-05    ...      38.559494  55.833622  82.738670  57.572517  26.784735   \n",
              "2017-01-06    ...      38.672909  56.913094  82.691956  57.533035  26.370926   \n",
              "2017-01-09    ...      38.086956  56.922737  81.327774  57.710697  26.220448   \n",
              "\n",
              "                  XYL        YUM         ZBH       ZION        ZTS  \n",
              "Date                                                                \n",
              "2017-01-03  48.598770  61.319050  101.874840  42.171959  52.963348  \n",
              "2017-01-04  49.323105  61.542175  102.811455  42.777485  53.477272  \n",
              "2017-01-05  48.872841  61.745895  103.472023  42.084061  53.299377  \n",
              "2017-01-06  48.530254  62.492851  103.481880  42.357521  53.467388  \n",
              "2017-01-09  48.324699  62.667465  105.493156  41.898495  53.319145  \n",
              "\n[5 rows x 499 columns]"
            ],
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>A</th>\n",
              "      <th>AAL</th>\n",
              "      <th>AAP</th>\n",
              "      <th>AAPL</th>\n",
              "      <th>ABBV</th>\n",
              "      <th>ABC</th>\n",
              "      <th>ABMD</th>\n",
              "      <th>ABT</th>\n",
              "      <th>ACN</th>\n",
              "      <th>ADBE</th>\n",
              "      <th>...</th>\n",
              "      <th>XEL</th>\n",
              "      <th>XLNX</th>\n",
              "      <th>XOM</th>\n",
              "      <th>XRAY</th>\n",
              "      <th>XRX</th>\n",
              "      <th>XYL</th>\n",
              "      <th>YUM</th>\n",
              "      <th>ZBH</th>\n",
              "      <th>ZION</th>\n",
              "      <th>ZTS</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Date</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>2017-01-03</th>\n",
              "      <td>45.764454</td>\n",
              "      <td>45.590179</td>\n",
              "      <td>170.015747</td>\n",
              "      <td>113.013916</td>\n",
              "      <td>57.952969</td>\n",
              "      <td>80.150398</td>\n",
              "      <td>112.360001</td>\n",
              "      <td>37.477722</td>\n",
              "      <td>113.159943</td>\n",
              "      <td>103.480003</td>\n",
              "      <td>...</td>\n",
              "      <td>38.389378</td>\n",
              "      <td>56.932369</td>\n",
              "      <td>84.925102</td>\n",
              "      <td>57.858753</td>\n",
              "      <td>25.919497</td>\n",
              "      <td>48.598770</td>\n",
              "      <td>61.319050</td>\n",
              "      <td>101.874840</td>\n",
              "      <td>42.171959</td>\n",
              "      <td>52.963348</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2017-01-04</th>\n",
              "      <td>46.364933</td>\n",
              "      <td>45.984047</td>\n",
              "      <td>171.410950</td>\n",
              "      <td>112.887413</td>\n",
              "      <td>58.770123</td>\n",
              "      <td>82.139374</td>\n",
              "      <td>115.739998</td>\n",
              "      <td>37.775249</td>\n",
              "      <td>113.432007</td>\n",
              "      <td>104.139999</td>\n",
              "      <td>...</td>\n",
              "      <td>38.559494</td>\n",
              "      <td>56.517933</td>\n",
              "      <td>83.990730</td>\n",
              "      <td>58.332508</td>\n",
              "      <td>26.897594</td>\n",
              "      <td>49.323105</td>\n",
              "      <td>61.542175</td>\n",
              "      <td>102.811455</td>\n",
              "      <td>42.777485</td>\n",
              "      <td>53.477272</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2017-01-05</th>\n",
              "      <td>45.813671</td>\n",
              "      <td>45.186462</td>\n",
              "      <td>171.291336</td>\n",
              "      <td>113.461502</td>\n",
              "      <td>59.215847</td>\n",
              "      <td>81.188530</td>\n",
              "      <td>114.809998</td>\n",
              "      <td>38.101559</td>\n",
              "      <td>111.731606</td>\n",
              "      <td>105.910004</td>\n",
              "      <td>...</td>\n",
              "      <td>38.559494</td>\n",
              "      <td>55.833622</td>\n",
              "      <td>82.738670</td>\n",
              "      <td>57.572517</td>\n",
              "      <td>26.784735</td>\n",
              "      <td>48.872841</td>\n",
              "      <td>61.745895</td>\n",
              "      <td>103.472023</td>\n",
              "      <td>42.084061</td>\n",
              "      <td>53.299377</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2017-01-06</th>\n",
              "      <td>47.241043</td>\n",
              "      <td>45.501560</td>\n",
              "      <td>169.049072</td>\n",
              "      <td>114.726402</td>\n",
              "      <td>59.234417</td>\n",
              "      <td>82.275185</td>\n",
              "      <td>115.419998</td>\n",
              "      <td>39.138073</td>\n",
              "      <td>113.004478</td>\n",
              "      <td>108.300003</td>\n",
              "      <td>...</td>\n",
              "      <td>38.672909</td>\n",
              "      <td>56.913094</td>\n",
              "      <td>82.691956</td>\n",
              "      <td>57.533035</td>\n",
              "      <td>26.370926</td>\n",
              "      <td>48.530254</td>\n",
              "      <td>62.492851</td>\n",
              "      <td>103.481880</td>\n",
              "      <td>42.357521</td>\n",
              "      <td>53.467388</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2017-01-09</th>\n",
              "      <td>47.388699</td>\n",
              "      <td>46.358227</td>\n",
              "      <td>168.949417</td>\n",
              "      <td>115.777237</td>\n",
              "      <td>59.624420</td>\n",
              "      <td>82.934944</td>\n",
              "      <td>117.110001</td>\n",
              "      <td>39.099686</td>\n",
              "      <td>111.741318</td>\n",
              "      <td>108.570000</td>\n",
              "      <td>...</td>\n",
              "      <td>38.086956</td>\n",
              "      <td>56.922737</td>\n",
              "      <td>81.327774</td>\n",
              "      <td>57.710697</td>\n",
              "      <td>26.220448</td>\n",
              "      <td>48.324699</td>\n",
              "      <td>62.667465</td>\n",
              "      <td>105.493156</td>\n",
              "      <td>41.898495</td>\n",
              "      <td>53.319145</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>5 rows × 499 columns</p>\n",
              "</div>"
            ]
          },
          "metadata": {}
        }
      ],
      "execution_count": 12,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import math\n",
        "#Calculate average annual percentage return and volatilities over a theoretical one year period\n",
        "returns = dataset.pct_change().mean() * 252\n",
        "returns = pd.DataFrame(returns)\n",
        "#print(returns)\n",
        "returns.columns = ['Returns']\n",
        "returns['Volatility'] = dataset.pct_change().std() * math.sqrt(252)\n",
        "#print(returns['Volatility'])\n",
        "#format the data as a numpy array to feed into the K-Means algorithm\n",
        "data = np.asarray([np.asarray(returns['Returns']),np.asarray(returns['Volatility'])]).T\n",
        "#removing NaN values, replacing them by 0\n",
        "cleaned_data = np.where(np.isnan(data), 0, data)\n",
        "#cleaned_data"
      ],
      "outputs": [],
      "execution_count": 14,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "X = cleaned_data"
      ],
      "outputs": [],
      "execution_count": 16,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.cluster import KMeans\n",
        "from sklearn.preprocessing import StandardScaler\n",
        "\n",
        "# Define the number of clusters in a variable 'n_clusters'\n",
        "n_clusters = 12\n",
        "\n",
        "# Cluster the data\n",
        "kmeans = KMeans(n_clusters)\n",
        "kmeans.fit(X)"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "execution_count": 17,
          "data": {
            "text/plain": [
              "KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,\n",
              "    n_clusters=12, n_init=10, n_jobs=1, precompute_distances='auto',\n",
              "    random_state=None, tol=0.0001, verbose=0)"
            ]
          },
          "metadata": {}
        }
      ],
      "execution_count": 17,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.cluster import KMeans\n",
        "\n",
        "min_clusters = 1\n",
        "max_clusters = 20\n",
        "distortions = []\n",
        "for i in range(min_clusters, max_clusters+1):\n",
        "    km = KMeans(n_clusters=i,\n",
        "                init='k-means++',\n",
        "                n_init=10,\n",
        "                max_iter=300,\n",
        "                random_state=0)\n",
        "    km.fit(X)\n",
        "    distortions.append(km.inertia_)\n",
        "    \n",
        "# Plot\n",
        "plt.plot(range(min_clusters, max_clusters+1), distortions, marker='o')\n",
        "plt.xlabel(\"Number of clusters\")\n",
        "plt.ylabel(\"Distortion\")\n",
        "plt.show()"
      ],
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ],
            "image/png": [
              "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\n"
            ]
          },
          "metadata": {}
        }
      ],
      "execution_count": 20,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "wcss = []\n",
        "for k in range(2, 20):\n",
        "    k_means = KMeans(n_clusters=k)\n",
        "    k_means.fit(X)\n",
        "    wcss.append(k_means.inertia_)\n",
        "\n",
        "fig = plt.figure(figsize=(15, 5))\n",
        "plt.plot(range(2, 20), wcss)\n",
        "plt.grid(True)\n",
        "plt.title('Elbow curve')\n",
        "plt.show()"
      ],
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1080x360 with 1 Axes>"
            ],
            "image/png": [
              "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9eJTVZST4XeJAAAAgG8GOvURGBLTS/P1o4+cqyf/+r265MwJ+tEzm3XxHc/oeyve4suyAQAAMGYR1JAWzizN179/9Fw98bmLddEZ4/V/n96k99zxB/3g95t0lC/MBgAAwBhDUENamVlWoB9/fJ4e+1/v0YLTxun7v39LF9/xjH749CYdI7ABAABgjCCoIS2dXV6ou26s1vLPvkfnTSvWd1e8pYu/9Yz+/ZnNamiJ+V0eAAAAMKwIakhrsysKdfdN5+mRz1ykqilF+vaTb+riO/6gHz/7tppaCWwAAAAYnQhqCIS5U4r0k0+er4f/6kKdM7lI33ziDV18xzO667ktOt4a97s8AAAAYEgR1BAoVacU62c3n6/ffPpCzSov0Dce36iLv/WM7n5+i5rbCGwAAAAYHQhqCKR5U4v181vm69efukBnlubp648lA9tPXnyHwAYAAIDAI6gh0M6bVqL7b1ugB5cs0Gnjc/XPj27QJd9+Rj/701a1xAhsAAAACCaCGkaF+aeN04N/eYHuv22+ppbk6p8eWa+ab6/Uz1/aRmADAABA4BDUMKpcePp4PfiXC/SLW+arvChb/7jsdS389krd//J2tcYSfpcHAAAA9AtBDaOOmek908frvz91gX528/maWJClf3j4NS38zkot/fN2tcUJbAAAAEhvBDWMWmam9545QQ//1YX6ySfP0/i8DH3podd06XdX6lerdihGYAMAAECaIqhh1DMzLZwxUcs+c5HuualahdlR/f//XavLvvesfrN6J4ENAAAAaYeghjHDzHTZzFI9evt7dNeN1crNiOgLv16nK77/nB5es1PxhPO7RAAAAEASQQ1jkJnpilmlWv7Z9+jHH5unzEhIf/PgOr3v+8/qkbW7CGwAAADwHUENY1YoZFo0e5Ie/18X6z8+eq7CIdPnlq7V+//tOT26brcSjsAGAAAAf0T8LgDwWyhkuvKcMi06e5Ief71OP/j9Jn32gTUqyzV9JLFJV88t16njc/0uEwAAAGMIQQ3whEKmq+eU6wOzy7S8drd+9LtafXfFW/ruird0dnmBrp5TrqvnlGlKSY7fpQIAAGCUI6gB3YRDpusqK1R4eJPOrJyvx1+r06O1dbrjd2/ojt+9oblTinTNnDJdNadMZYXZfpcLAACAUYigBpxEeVG2br34NN168WnacbBJy2vrtLx2t77+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\n"
            ]
          },
          "metadata": {}
        }
      ],
      "execution_count": 22,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from scipy.cluster.vq import kmeans,vq\n",
        "# computing K-Means with K = 5 (5 clusters)\n",
        "centroids,_ = kmeans(cleaned_data,5)\n",
        "# assign each sample to a cluster\n",
        "idx,_ = vq(cleaned_data,centroids)\n",
        " \n",
        "data = cleaned_data"
      ],
      "outputs": [],
      "execution_count": 25,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Plot Scatter\n",
        "plt.scatter(X[idx==0,0],X[idx==0,1],s=100,c='red',label='Cluster1',alpha=0.65)\n",
        "plt.scatter(X[idx==1,0],X[idx==1,1],s=100,c='blue',label='Cluster2',alpha=0.65)\n",
        "plt.scatter(X[idx==2,0],X[idx==2,1],s=100,c='green',label='Cluster3',alpha=0.65)\n",
        "plt.scatter(X[idx==3,0],X[idx==3,1],s=100,c='cyan',label='Cluster4',alpha=0.65)\n",
        "plt.scatter(X[idx==4,0],X[idx==4,1],s=100,c='black',label='Cluster5',alpha=0.65)\n",
        "#plt.scatter(k_means.cluster_centers_[:,0],k_means.cluster_centers_[:,1],s=300,c='yellow')\n",
        "plt.scatter(centroids[:,0],centroids[:,1],s=200, c='yellow', alpha = 0.8)\n",
        "plt.legend()\n",
        "plt.show()"
      ],
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ],
            "image/png": [
              "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\n"
            ]
          },
          "metadata": {}
        }
      ],
      "execution_count": 26,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "details = [(name,cluster) for name, cluster in zip(returns.index,idx)]"
      ],
      "outputs": [],
      "execution_count": 27,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    },
    {
      "cell_type": "code",
      "source": [
        "labels =['Stock Symbol', 'Cluster']\n",
        "df = pd.DataFrame.from_records(details, columns=labels)\n",
        "df.head(n=10)"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "execution_count": 28,
          "data": {
            "text/plain": [
              "  Stock Symbol  Cluster\n",
              "0            A        4\n",
              "1          AAL        3\n",
              "2          AAP        0\n",
              "3         AAPL        4\n",
              "4         ABBV        1\n",
              "5          ABC        3\n",
              "6         ABMD        1\n",
              "7          ABT        4\n",
              "8          ACN        4\n",
              "9         ADBE        1"
            ],
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Stock Symbol</th>\n",
              "      <th>Cluster</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>A</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>AAL</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>AAP</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>AAPL</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>ABBV</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>ABC</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>ABMD</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>ABT</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>ACN</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>ADBE</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ]
          },
          "metadata": {}
        }
      ],
      "execution_count": 28,
      "metadata": {
        "collapsed": false,
        "outputHidden": false,
        "inputHidden": false
      }
    }
  ],
  "metadata": {
    "kernel_info": {
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "name": "python",
      "mimetype": "text/x-python",
      "nbconvert_exporter": "python",
      "file_extension": ".py",
      "version": "3.5.5",
      "pygments_lexer": "ipython3"
    },
    "kernelspec": {
      "name": "python3",
      "language": "python",
      "display_name": "Python 3"
    },
    "nteract": {
      "version": "0.11.9"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 4
}